package com.jiashihui.schema_lgorithm.schema.singleton;

/**
 * @author jiashihui
 * @describe: 单例模式 静态内部类
 * @date 2019/02/21
 */
public class Singleton3 {

    private User user;

    private Singleton3(){
    }

    // 注解：定义一个私有的内部类，在第一次用这个嵌套类时，会创建一个实例。
    // 而类型为SingletonHolder的类，只有在Singleton.getInstance()中调用，由于私有的属性，他人无法使用SingleHolder，不调用Singleton.getInstance()就不会创建实例。
    // 优点：达到了lazy loading的效果，即按需创建实例。
    private static class SingletonHolder {
        private final static Singleton3 singleton3 = setValue();

        private static Singleton3 setValue(){
            Singleton3 singleton3 = new Singleton3();
            User user = new User();
            user.setId(1);
            user.setName("wang");
            singleton3.setUser(user);
            return singleton3;
        }
    }

    public static Singleton3 getInstance(){
        return SingletonHolder.singleton3;
    }

    public User getUser(){
        return user;
    }

    private void setUser(User user) {
        this.user = user;
    }
}
